package com.javaweb.aop;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

/**
 * @desc: TODO: 使用注解 @NPECatch, 并使用@within, @annotation
 *            实现对类级别或方法级别的方法执行中的异常进行统一捕获处理。
 *            处理的逻辑为，输出在控制台。
 * @author:
 * @date:
 */
@Aspect
@Component
public class NullExceptionAspect {

    @Pointcut("execution(* *(..)) && (@within(com.javaweb.aop.NPECatch) || @annotation(com.javaweb.aop.NPECatch))")
    public void methodsAnnotatedWithNPECatch() {}

    @AfterThrowing(pointcut = "methodsAnnotatedWithNPECatch()", throwing = "ex")
    public void handleException(JoinPoint joinPoint, NullPointerException ex) {
        System.out.println("捕获到异常： " + ex);
    }
}
